class ProducoesController < ApplicationController

  filter_access_to :index, :new, :create, :attribute_check => true, :load_method => :get_nested
  filter_access_to :show, :edit, :update, :destroy, :attribute_check => true, :load_method => :get_not_nested
  before_filter    :check_reducao_fixa

  def index
    @producoes = @produto.producoes.get
  end

  def create
    @producao = @produto.producoes.new(params[:producao])
    if @producao.save
      flash[:notice] = 'Produção cadastrada com sucesso.'
    else
      logger.debug @producao.errors.to_xml
      head :unprocessable_entity
    end
  end

  def update
    if blank_or_zero?(params[:producao][:quantidade_produzida])
      @producao.destroy
      @producao = Producao.new(:ano => @producao.ano, :mes => @producao.mes)
    elsif @producao.update_attributes(params[:producao])
      flash[:notice] = 'Produção atualizada com sucesso.'
    else
      head :unprocessable_entity
    end
  end

  private

  def get_not_nested
    @producao = Producao.find(params[:id])
    get_pleito
  end

  def get_nested
    @produto = Produto.find(params[:produto_id])
    get_pleito
  end

  def get_pleito
    @produto ||= @producao.produto
    @atividade = @produto.atividade
    @caracterizacao = @atividade.caracterizacao
    @pleito = @caracterizacao.pleito
  end

  def blank_or_zero?(param)
    param.blank? || param.to_f.zero?
  end

  def check_reducao_fixa
    redirect_to [@atividade, :produtos] unless @pleito.reducao_fixa?
  end

end
